package bbalgae.swing;

import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;

import javax.swing.ImageIcon;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.KeyStroke;
import javax.xml.crypto.dsig.spec.HMACParameterSpec;

/* 메뉴작성법
 JMenuBar->JMenu->JMenuItem

 */

public class SwingMenu extends JMenuBar {

	private JMenu mnFile = null; // 파일
	private JMenu mnEdit = null; // 편집
	private JMenu mnView = null; // 보기
	private JMenu mnTool = null; // 도구
	private JMenu mnWnd = null; // 창
	private JMenu mnHelp = null; // 도움말

	private static SwingMenuActionL mnActionlistener = null;

	public SwingMenu() {
		mnActionlistener = new SwingMenuActionL();
		makeMenu();
		makeMenuItemFile();
		addShotCut();
		addMenu();

		// makeMenuItemView();
		// makeMenuItemHelp();
		// makeMenuItemWindow();
		// makeMenuItemTool();
		makeMenuItemEdit();

	}

	private void makeMenuItemEdit() {
		// TODO Auto-generated method stub

	}

	// 메뉴바에 추가할 메뉴를 생성함
	private void makeMenu() {
		mnFile = new JMenu("파일(F) ");
		// setFont(new Font("맑은 고딕",Font.BOLD,12));
		// 메뉴 글꼴 변경을 위해setFont 메소드 사용 하지만 모든 메뉴와 메뉴항목에 seTFont를사용하는것은
		// 무척 번거로운 일임 따라서 프로그램 전체 글꼴을 변경하는 방법을ㅇ ㅣ용
		// main 메소드에서 FontUIResource 이용함
		mnEdit = new JMenu("Edit (E)");
		mnView = new JMenu("보기 (V)");
		mnTool = new JMenu("도구 (A)");
		mnWnd = new JMenu("창 (G) ");
		mnHelp = new JMenu("도움말 (H) ");

	}

	private void makeMenuItemFile() {
		mnFile.add(makeMenuItems("새파일 (N)        ", "new", KeyEvent.VK_N, true,
				KeyEvent.VK_1));

		mnFile.addSeparator();
		mnFile.add(makeMenuItems("닫기 (C)        ", "close", KeyEvent.VK_C,
				false, KeyEvent.VK_2));
		mnFile.addSeparator();
		mnFile.add(makeMenuItems("종료 (X)        ", "exit", KeyEvent.VK_X, true,
				KeyEvent.VK_3));
		mnHelp.add(makeMenuItems("프로젝트 정보 (I)", "about", KeyEvent.VK_I, true, 0));

	}

	/*
	 * private void makeMenuItemView() { mnView.add(makeMenuItems("찾기 (S)",
	 * null, 0, true)); } private void makeMenuItemWindow() {
	 * mnView.add(makeMenuItems("찾기 (S)", null, 0, true)); } private void
	 * makeMenuItemHelp() { mnView.add(makeMenuItems("찾기 (S)", null, 0, true));
	 * } private void makeMenuItemTool() { mnView.add(makeMenuItems("찾기 (S)",
	 * null, 0, true)); }
	 */
	// 메뉴항목에 단축키 지정
	private void addShotCut() {

		mnFile.setMnemonic(KeyEvent.VK_F);
		mnView.setMnemonic(KeyEvent.VK_V);
		mnHelp.setMnemonic(KeyEvent.VK_H);
		mnEdit.setMnemonic(KeyEvent.VK_E);
		mnTool.setMnemonic(KeyEvent.VK_T);
		mnWnd.setMnemonic(KeyEvent.VK_G);

	}

	// 생성 및 설정된 메뉴를 메뉴바에 추가
	private void addMenu() {
		add(mnFile);
		add(mnEdit);
		add(mnView);
		add(mnTool);
		add(mnWnd);
		add(mnHelp);

	}

	// 메뉴에 추가할 메뉴항목 menuitem 생성
	// 배열을 이용하면 편함
	private JMenuItem makeMenuItems(String text, String img, int skey,
			boolean off, int akey) {

		String icon = null; // 메뉴에 쓸 아이콘

		if (img != null) // 아이콘 이미지가 있으면
			icon = "/images/menu/" + img + ".png";

		JMenuItem mnitem = null;
		try {

			mnitem = new JMenuItem(text, new ImageIcon(getClass().getResource(
					icon)));
		} catch (Exception ex) {
			mnitem = new JMenuItem(text);

		}

		// mnitem.setEnabled(off); // mnFile.add(makeMenuItems("닫기 (C)", null,
		// 0, false)); 값을 false로 줬기 때문에 닫기메뉴가 비활성
		mnitem.setMnemonic(skey);
		mnitem.setAccelerator(KeyStroke.getKeyStroke(akey,
				ActionEvent.CTRL_MASK));

		// 이벤트 처리관련 메소드 등록
		mnitem.addActionListener(mnActionlistener);
		mnitem.setActionCommand(img);

		return mnitem;
	}

}
